import torch.cuda
import torch.backends
import os

embedding_model_dict = {
    "ernie-tiny": "nghuyong/ernie-3.0-nano-zh",
    "ernie-base": "nghuyong/ernie-3.0-base-zh",
    "text2vec-base": "shibing624/text2vec-base-chinese",
    "text2vec": "GanymedeNil/text2vec-large-chinese",
    "luotuo": "silk-road/luotuo-bert",
    "rocketqa": "",
}

# Embedding model name
EMBEDDING_MODEL = "rocketqa"

# Embedding running device
EMBEDDING_DEVICE = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"

# supported LLM models
llm_model_dict = {
    "chatyuan": "ClueAI/ChatYuan-large-v2",
    "chatglm-6b-int4-qe": "THUDM/chatglm-6b-int4-qe",
    "chatglm-6b-int4": "THUDM/chatglm-6b-int4",
    "chatglm-6b-int8": "THUDM/chatglm-6b-int8",
    "chatglm-6b": "THUDM/chatglm-6b",
    "chatglm2-6b-int4": "/data/parallel/models/chatglm2-6b-int4",
    "chatglm2-6b": "./chatglm2-6b",
}

# LLM model name
LLM_MODEL = "chatglm2-6b"

# LLM streaming reponse
STREAMING = True

# Use p-tuning-v2 PrefixEncoder
USE_PTUNING_V2 = False

# LLM running device
LLM_DEVICE = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"

VS_ROOT_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "vector_store")

UPLOAD_ROOT_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "content")

API_UPLOAD_ROOT_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "api_content")

# 基于上下文的prompt模版，请务必保留"{question}"和"{context}"
PROMPT_TEMPLATE = """已知信息：
{context} 

根据上述已知信息，简洁和专业的来回答用户的问题。不允许在答案中添加编造成分，也不要列举具体已知信息和相关法条名称和第几条。如果无法从已知信息中得到答案，请说暂时无法回答。 问题是：{question}"""

# PROMPT_TEMPLATE = """你是一个大型语言模型，你的专长是阅读和总结政策文件。
# 您将获得一个查询和一系列来自政策文件，按照它们与查询的相似度排序。你必须获取上述政策文件，并简洁和专业地回答查询的问题。不允许在答案中添加编造成分，也不要列举具体已知信息和相关法条名称和第几条。如果无法从已知信息中得到答案，请说暂时无法回答。 
# 查询是：{question}
# {context}
# """

# 匹配后单段上下文长度
CHUNK_SIZE = 500
